package com.xyh.transaction.utils;

import com.github.pagehelper.PageInfo;
import com.xyh.transaction.entity.Menu;
import com.xyh.transaction.entity.vo.MenuOptionsVO;
import com.xyh.transaction.entity.vo.MetaPropsVO;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Objects;

public class PageUtil {


    public static void main(String[] args) {
        PageUtil pageUtil = new PageUtil();
        List<Menu> menus = new ArrayList<>();
        menus.add(new Menu(1, null, "test", "test", "test", "test", "test", "test", true, true, true, true, "test", "test"));
        menus.add(new Menu(2, 1, "test1", "test1", "test", "test", "test", "test", true, true, true, true, "test", "test"));
        menus.add(new Menu(3, 1, "test2", "test2", "test", "test", "test", "test", true, true, true, true, "test", "test"));
        menus.add(new Menu(4, 2, "test3", "test3", "test", "test", "test", "test", true, true, true, true, "test", "test"));
        menus.add(new Menu(5, 4, "test4", "test4", "test", "test", "test", "test", true, true, true, true, "test", "test"));
        menus.add(new Menu(6, null, "test5", "test5", "test", "test", "test", "test", true, true, true, true, "test", "test"));

//        pageUtil.buildMenus(menus, null).forEach(System.out::println);
    }





    /**
     * 假分页
     *  pageSize为null时，返回所有数据
     *
     * @param dataList 数据列表
     * @param pageNum  页码
     * @param pageSize 页面大小
     * @return {@link PageInfo}<{@link T}>
     */
    public static <T> PageInfo<T> paginateList(List<T> dataList, Integer pageNum, Integer pageSize) {
        int totalSize = dataList.size();

        // 校验页码和页大小，处理异常情况
        if (pageNum == null || pageNum <= 0) {
            pageNum = 1;
        }
        if (pageSize == null || pageSize <= 0 || pageSize > totalSize) {
            pageSize = totalSize; // 返回所有数据
        }

        // 计算总页数
        int totalPages = (int) Math.ceil((double) totalSize / pageSize);

        // 校验页码，防止页码超出范围
        if (pageNum > totalPages) {
            pageNum = totalPages;
        }

        // 计算起始索引和结束索引
        int startIndex = (pageNum - 1) * pageSize;
        int endIndex = Math.min(startIndex + pageSize, totalSize);

        // 获取当前页的数据列表
        List<T> paginatedDataList = dataList.subList(startIndex, endIndex);

        // 构建 PageInfo 对象
        PageInfo<T> pageInfo = new PageInfo<>(paginatedDataList);
        pageInfo.setPageNum(pageNum);
        pageInfo.setPageSize(pageSize);
        pageInfo.setTotal(totalSize);
        pageInfo.setPages(totalPages);

        return pageInfo;
    }
}
